from apis_study.student import Student


class StuDB:
    # 用一个类变量（全局字典）保存所有学员信息，key 是 stu_id，value 是 Student 对象
    _stu_dic = {}

    @classmethod
    def _get_stu(cls, stu_id: str) -> Student | None:
        """
        私有方法，用于根据学号查找学员对象，返回 Student 或 None
        """
        return cls._stu_dic.get(stu_id)

    @classmethod
    def add_stu(cls, stu_id, name, phone, wx, qq, gender):
        """
        添加学员，如果学号已存在则返回提示，否则创建 Student 并添加到字典中
        """
        if stu_id in cls._stu_dic:
            return f"{stu_id} 已存在"
        stu = Student(stu_id, name, phone, wx, qq, gender)
        cls._stu_dic[stu_id] = stu
        return "添加成功"

    @classmethod
    def select_stu(cls, stu_id):
        """
        根据学号查询学员信息，返回 Student 对象或提示信息
        """
        stu = cls._get_stu(stu_id)
        return stu if stu else f"{stu_id} 不存在"

    @classmethod
    def del_stu(cls, stu_id):
        """
        删除指定学号的学员，如果不存在则返回提示
        """
        if stu_id in cls._stu_dic:
            del cls._stu_dic[stu_id]
            return "删除成功"
        return f"{stu_id} 不存在"

    @classmethod
    def change_stu(cls, stu_id, **kwargs):
        """
        修改指定学员信息，kwargs 是键值对，比如 name="王五"，phone="123456"
        只修改传入的字段，不会影响其他信息
        """
        stu = cls._get_stu(stu_id)
        if not stu:
            return f"{stu_id} 不存在"
        for key, value in kwargs.items():
            if hasattr(stu, key):  # 检查这个属性是否存在
                setattr(stu, key, value)  # 修改属性值
        return "修改成功"

    @classmethod
    def all_students(cls):
        """
        返回所有学员的列表
        """
        return list(cls._stu_dic.values())


if __name__ == '__main__':
    StuDB.add_stu("1", "吴亦凡", "110", "wx001", "qq01", "male")
    print(StuDB._get_stu("1"))
